package com.factory.abstractfactory.demo0;

import com.factory.abstractfactory.demo0.extend.AbstractPCFactory;
import com.factory.abstractfactory.demo0.extend.MacPCFactory;
import com.factory.abstractfactory.demo0.extend.MiPCFactory;
import com.factory.abstractfactory.demo0.extend.PC;

public class Client {

    public static void main(String[] args){
        testCase1();

        System.out.println("===============开始拓展PC业务============");
        testCase2();

        /**
         * 思考：
         * 拓展PC业务还得新创建工厂及具体工厂类，总的类个数变多了不说，内存中还创建了好多工厂对象，
         * 干嘛不直接创建具体PC，直接调用PC#network。
         * 因此，需要对工厂进行改造，能否让一个工厂创建多个产品？详见demo1
         * 改造点：让抽象工厂变得能够创建多个等级的产品（PC级别，Phone级别），具体工厂负责生产这些等级产品。
         * 优点就是工厂变少了，缺点就是拓展PC业务需要修改工厂，给工厂添加制造PC的业务。
         */

    }

    // 生产不同品牌手机
    public static void testCase1(){
        AbstractPhoneFactory miFactory = new MiPhoneFactorty();
        Phone miPhone = miFactory.makePhone();
        miPhone.call();

        AbstractPhoneFactory macFactory = new MacPhoneFactory();
        Phone macPhone = macFactory.makePhone();
        macPhone.call();
    }

    // 拓展PC业务
    public static void testCase2(){
        AbstractPCFactory miFactory = new MiPCFactory();
        PC miPC = miFactory.makePC();
        miPC.network();

        AbstractPCFactory macFactory = new MacPCFactory();
        PC macPC = macFactory.makePC();
        macPC.network();
    }
}
